from django.utils.encoding import smart_str

#recupera os produtos que estao armazenados no carrinho do cliente
'''
este pacote nao possui carrinho proprio.
implemente nesta funcao a recuperacao dos dados. Sugerimos que os dados
sejam devolvidos num dicionario com os seguintes campos:
    produto_codigo_X
    produto_valor_X
    produto_descricao_X
    produto_qtde_X
    produto_extra_X - Campo opcional para dados de seu uso

PS: o X e o indice dos produtos. O substitua por 1, 2, 3...1000(limite recomendado)
'''
def recupera_carrinho( pedido ):

    #uma implementacao so para ilustracao e testes
    from gouache.pagamento_digital.models import Produto


    produtos = Produto.objects.filter( pedido = pedido )
    if produtos.count() == 0:
        produto = Produto( codigo='20', descricao='Uma descricao', qtde=4, valor=0.50, extra='', pedido = pedido )
        produto.save()
        produto = Produto( codigo='19', descricao='Uma descricao', qtde=4, valor=0.50, extra='', pedido = pedido )
        produto.save()
        produtos = Produto.objects.filter( pedido = pedido )

    saida = []
    for p in produtos:
        temp = {}
        temp['codigo'] = p.codigo
        temp['descricao'] = p.descricao
        temp['qtde'] = p.qtde
        temp['valor'] = p.valor
        temp['extra'] = p.extra
        saida.append( temp.copy() )


    return saida


'''
Salva os dados enviados para nos pelo retorno automatico do Pagamento Digital.
'''
def salva_pedido( request, dados_pedido, produtos ):
    from gouache.pagamento_digital.models import Cliente, Pedido, Produto


    pedido = Pedido.objects.get( id = int(dados_pedido['id_pedido']) )


    cliente = pedido.cliente
    cliente.email = dados_pedido['cliente_email']
    cliente.complemento = dados_pedido['cliente_complemento']
    cliente.endereco = dados_pedido['cliente_endereco']
    cliente.data_nascimento = dados_pedido['cliente_data_nascimento']
    cliente.orgao_emissor_rg = dados_pedido['cliente_orgao_emissor_rg']
    cliente.bairro = dados_pedido['cliente_bairro']
    cliente.nome = dados_pedido['cliente_nome']
    cliente.estado = dados_pedido['cliente_estado']
    cliente.cpf = dados_pedido['cliente_cpf']
    cliente.rg = dados_pedido['cliente_rg']
    cliente.sexo = dados_pedido['cliente_sexo']
    cliente.estado_emissor_rg = dados_pedido['cliente_estado_emissor_rg']
    cliente.cep = dados_pedido['cliente_cep']
    cliente.cidade = dados_pedido['cliente_cidade']
    cliente.data_emissao_rg = dados_pedido['cliente_data_emissao_rg']
    try:
        cliente.informacoes_loja = dados_pedido['informacoes_loja']
    except:
        pass

    cliente.save()

    pedido.id_transacao = dados_pedido['id_transacao']

    pedido.data_transacao = dados_pedido['data_transacao']#: u'02/09/2011'
    pedido.data_credito = dados_pedido['data_credito']

    pedido.valor_original = float( dados_pedido['valor_original'] )
    pedido.valor_loja = float( dados_pedido['valor_loja'] )
    pedido.valor_total = float( dados_pedido['valor_total'] )
    pedido.desconto = float( dados_pedido['desconto'] )
    pedido.acrescimo = float( dados_pedido['acrescimo'] )

    pedido.tipo_pagamento = dados_pedido['tipo_pagamento']
    pedido.parcelas = int( dados_pedido['parcelas'] )

    pedido.status = dados_pedido['status']
    pedido.cod_status = int( dados_pedido['cod_status'] )
    pedido.frete = float( dados_pedido['frete'] )
    pedido.tipo_frete = dados_pedido['tipo_frete']

    try:
        pedido.email_vendedor = dados_pedido['email_vendedor']
    except:
        pass
    try:
        pedido.free = dados_pedido['free']
    except:
        pass
    pedido.save()


    for p in produtos:
        produto = Produto.objects.get(pedido = pedido, id = int(p['produto_codigo']) )
        produto.descricao = p['produto_descricao']
        produto.qtde = p['produto_qtde']
        produto.valor = p['produto_valor']
        produto.extra = p['produto_extra']
        produto.save()
